package com.eling.elcms.travel.service;

import com.eling.elcms.core.dao.hibernate.search.SearchCondition;
import com.eling.elcms.core.service.IGenericManager;
import com.eling.elcms.travel.model.*;
import com.eling.elcms.travel.model.view.*;

import java.util.Date;
import java.util.List;

public interface ICheckInImplementManager extends IGenericManager<CheckInImplement, Long>{
	
	/**
	 * 
	 * @param checkInImplement
	 * @param roomPersons
	 * @param signUpRooms 
	 * @param dinners 
	 * @param checkIncars 
	 * @return
	 */
	CheckInImplement save(CheckInImplement checkInImplement, 
			List<RoomPersonalInfo> roomPersons, List<CheckInMeeting> checkInMeetings, List<SignUpRoom> signUpRooms, List<Dinner> dinners, List<CheckInCar> checkIncars);
	
	/**
	 * 
	 * @param checkInImplement
	 * @return
	 */
	List<RoomPersonalInfo> queryRoomPersonal(CheckInImplement checkInImplement);
	
	/**
	 * 设置入住准备的已落实状态
	 * @param checkInImplement 入住准备落实单
	 * @return 入住准备落实单
	 */
	CheckInImplement setCiiCheckStatusConfirm(CheckInImplement checkInImplement);

	CheckInDetailView queryAll(CheckInImplement checkInImplement,Long pkRoom);

	ImplementView saveAll(ImplementView checkInImplement);

	List<CheckInImplement> queryAllCheckInOrder(CheckInImplement cii, Long pkServicePoint, Date startDate,
			Date endDate);

	List<SettlementView> querySettlement(Long pkServicePoint, String status,
			Date checkOutDate, Date checkOutDateEnd, String paymentMethod);

	CheckInImplement OrgConfirm(CheckInImplement cond);

	AllianceSettlement AllianceConfirm(AllianceSettlement cond);

	List<ChangeRoomSettlementView> queryChangeRoom(Long pkGroupReserve);

	/**
	 * 保存入住登记
	 * @param cond
	 * @return
	 */
	ImplementView saveCheckIn(ImplementView cond);

	List<CheckInImplement> querycheckin(CheckInImplement checkInImplement);

	List<CheckInImplement> searchCheckIn(SearchCondition sc);

	List<WaterElectricGroupView> waterElectricGroup(String checkInStatus, Long pkServicePoint, Date startDate, Date endDate);

	List<CheckInImplement> queryNoStatementTeam(CheckInImplement cond);

	CheckInImplement changeOnCredit(CheckInImplement cond);
	
	
	List<CheckInImplement> queryByPaymentMethod(CheckInImplement checkInImplement, String paymentMethod);
	
}
